package bitclub;

import herramientas.BitUtil;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import persistencia.PCliente;

/**
 * @author BitClub
 */
public class Cliente extends Persona {

    private double saldo;
    private int id;

    //Constructor completo para Cliente (Conocido el ID)
    public Cliente(String nombre, String apellidos, String dni, boolean activo, String mail, String tel_fijo, String tel_movil, String direccion, String codigoPostal, String localidad, Date nacimiento, char sexo, Date fechaAlta, Date fechaBaja, String password, double saldo, int id) {
        super(nombre, apellidos, dni, activo, mail, tel_fijo, tel_movil, direccion, codigoPostal, localidad, nacimiento, sexo, fechaAlta, fechaBaja, password);
        this.saldo = saldo;
        this.id = id;
    }

    //Constructor sin ID para dar de alta un Cliente
    public Cliente(String nombre, String apellidos, String dni, boolean activo, String mail, String tel_fijo, String tel_movil, String direccion, String codigoPostal, String localidad, Date nacimiento, char sexo, Date fechaAlta, Date fechaBaja, String password, double saldo) {
        super(nombre, apellidos, dni, activo, mail, tel_fijo, tel_movil, direccion, codigoPostal, localidad, nacimiento, sexo, fechaAlta, fechaBaja, password);
        this.saldo = saldo;
        this.id = -1;
    }

    //Constructor vacío para usar en la capa de persistencia
    public Cliente() {
        super();
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public double getSaldo() {
        return saldo;
    }

    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }

    @Override
    public String toString() {
        //En esta variable vamos a concatenar todos los atributos de nuestro Cliente
        String resultado = "";

        resultado += "________________________________________________________________\n";
        //Si acabamos de crear el cliente podemos mostrarlo para confirmarlo, entonces el id será -1
        if (this.getId() == -1) {
            resultado += "      " + this.getNombre() + ", " + this.getApellidos() + " (DNI " + this.getDni() + ")\n";
        } else {
            resultado += "   [Num." + this.getId() + "]  " + this.getNombre() + ", " + this.getApellidos() + " (DNI " + this.getDni() + ")\n";
        }
        resultado += "________________________________________________________________\n";

        resultado += "Dirección:        " + this.getDireccion();
        if (this.getCodigoPostal().length() > 0) {
            resultado += ", CP " + this.getCodigoPostal();
        }
        if (this.getLocalidad().length() > 0) {
            resultado += ", " + this.getLocalidad();
        }
        resultado += "\n";

        if (this.getSexo() == 'h') {
            resultado += "Sexo:             Hombre\n";
        } else {
            resultado += "Sexo:             Mujer\n";
        }
        resultado += "Fecha Nacimiento: " + BitUtil.muestraFecha(this.getNacimiento()) + "\n";

        if (this.getMail().length()>0) {
            resultado += "E-mail:           " + this.getMail() + "\n";
        }
        if (this.getTel_fijo().length()>0) {
            resultado += "Tel. Fijo:        " + this.getTel_fijo() + "\n";
        }
        if (this.getTel_movil().length()>0) {
            resultado += "Tel. Movil:       " + this.getTel_movil() + "\n";
        }
        resultado += "Fecha Alta:       " + BitUtil.muestraFecha(this.getFechaAlta()) + "\n";

        resultado += "________________________________________________________________\n";

        resultado += "Saldo:            " + this.getSaldo() + "\n";
        resultado += "________________________________________________________________\n";


        if (this.getFechaBaja() != null && this.isActivo() == false) {
            resultado += "                  EL CLIENTE FUE DADO DE BAJA\n";
            resultado += "Fecha Baja:       " + BitUtil.muestraFecha(this.getFechaBaja()) + "\n";
        }

        resultado += "\n\n";
        return resultado;

    }

    public String toStringLinea() {
        BitUtil.borra();
        String resultado = "";
        resultado += "________________________________________________________________\n";
        resultado += "   [Num." + this.getId() + "]  " + this.getNombre() + ",  " + this.getApellidos() + " (DNI " + this.getDni() + ")\n";
        resultado += "________________________________________________________________\n";
        return resultado;
    }

    /**
     * Crea un nuevo cliente
     */
    public void nuevo() {
        //Petición a la clase de persistencia de cliente
        PCliente.nuevoBD(this);

    }

    /**
     * Actualiza los datos de un cliente
     */
    public void actualizar() {
        //Petición a la clase de persistencia de cliente
        PCliente.actualizarBD(this);
    }

    /**
     * Devuelve una lista de clientes cuyo nombre o apellido coincida con cierto patron
     * @param nombre o apellido
     * @return List<Cliente>
     */
    public static List<Cliente> seleccionarPorNombre(String nombre) {
        List<Cliente> listCliente = new ArrayList();
        //Petición a la clase de persistencia de cliente
        listCliente = PCliente.seleccionarPorNombreBD(nombre);
        return listCliente;
    }

    /**
     * Devuelve el cliente cuyo dni se corresponda con el parámetro
     * @param dni
     * @return Cliente
     */
    public static Cliente seleccionarPorDni(String dni) {
        Cliente cliente;
        //Petición a la clase de persistencia de proveedor
        cliente = PCliente.seleccionarPorDniBD(dni);
        return cliente;
    }

    /**
     * Devuelve el cliente cuyo número de cliente se corresponda con el parámetro
     * @param numCliente Número de cliente
     * @return Cliente
     */
    public static Cliente seleccionarPorNumCliente(int numCliente) {
        Cliente cliente;
        //Petición a la clase de persistencia de proveedor
        cliente = PCliente.seleccionarPorNumClienteBD(numCliente);
        return cliente;
    }
        
}
